package org.elsfs.cloud.common.mybatis.ext.sql.support.insert;


import lombok.RequiredArgsConstructor;
import org.elsfs.cloud.common.mybatis.ext.sql.SqlParameterManager;

import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 标准实现
 *

 */
@RequiredArgsConstructor
public class StandardValuesItem implements ValuesItem {

    /**
     * SQL参数管理器
     */
    protected final SqlParameterManager sqlParameterManager;
    /**
     * 插入字段集合
     */
    private final Collection<String> insertFields;
    /**
     * 值集合
     */
    private final Collection<Map<String, Object>> values;

    /**
     * 构建SQL片段
     *
     * @return SQL片段
     */
    @Override
    public String buildSqlFragment() {
        if (this.values.isEmpty()) {
            return "VALUES";
        }

        return String.format(
            "VALUES %s",
            this.values.stream()
                .map(
                    value -> String.format(
                        "(%s)",
                        this.insertFields.stream()
                            .map(
                                field -> {
                                    Object v = value.get(field);
                                    if (v == null) {
                                        return "NULL";
                                    }

                                    return SqlParameterManager.buildParameterPlaceholder(
                                        this.sqlParameterManager.registerParameter(v)
                                    );
                                }
                            )
                            .collect(Collectors.joining(", "))
                    )
                )
                .collect(Collectors.joining(", "))
        );
    }
}
